import type { CodeType } from '@/types'
import type {
  Patient,
  PatientList,
  PatientOfAddFormData,
  PatientOfEditFormData,
  User,
  UserInfo
} from '@/types/user'
import { request } from '@/utils/request'

// 查询患者详情
export const getPatientDetail = (id: string) =>
  request<Patient>(`/patient/info/${id}`).then((res) => res.data)

/**
 * 问诊-删除患者信息
 * @param id 患者id
 */
const delPatient = (id: string) => request('/patient/del/' + id, 'DELETE')

/**
 * 问诊-编辑患者信息
 * @param p 患者表单数据
 */
const editPatient = (p: PatientOfEditFormData) =>
  request('/patient/update', 'PUT', p)

/**
 * 问诊-添加患者信息
 * @param p 患者表单数据
 */
const addPatient = (p: PatientOfAddFormData) =>
  request('/patient/add', 'POST', p)

/**
 * 问诊-查询患者列表信息
 */
const getPatientList = () =>
  request<PatientList>('/patient/mylist').then((res) => res.data)

/**
 * 我的-获取个人用户信息
 */
const getUserInfo = () => {
  return request<UserInfo>('/patient/myUser').then((res) => res.data)
}

/**
 * 根据短信验证码登录
 * @param mobile 手机号
 * @param code 验证码
 */
const loginByMobile = (mobile: string, code: string) => {
  return request<User>('/login', 'POST', {
    mobile,
    code
  }).then((res) => res.data)
}

/**
 * 获取手机验证码
 * @param mobile 手机号
 * @param type 验证码类型
 */
const getMobileCode = (mobile: string, type: CodeType) => {
  // 第二个泛型参数 指定的是 submitData 的类型
  return request<{ code: string }>('/code', 'GET', {
    mobile,
    type
  }).then((res) => res.data.code)
}

/**
 * 根据密码登录
 * @param mobile 手机号
 * @param password 密码
 */
const loginByPassword = (mobile: string, password: string) => {
  return (
    request<User>('/login/password', 'POST', {
      mobile,
      password
    })
      // 在 service 函数这里可以再进行一层数据简化
      .then((res) => res.data)
  )
}

export {
  addPatient,
  delPatient,
  editPatient,
  getMobileCode,
  getPatientList,
  getUserInfo,
  loginByMobile,
  loginByPassword
}
